查看原文
其他

教程 | 使用Mapbox Unity SDK进行游戏开发

Mapbox Mapbox 2019-06-02

今年,Mapbox全新发布了Mapbox Unity SDK,使Mapbox的地图、导航和定位功能可以在Unity游戏引擎中轻松实现。除了游戏,Mapbox也是VR、AR和模拟类的极其可靠的地理位置平台。我们的主要服务对象包括:类似Pokemon-Go的地理位置游戏,模拟游戏,地理类排行榜,地理类社交聊天以及位置相关广告用户等。


自从我们在Unity大会上推出Mapbox Unity SDK以来,获得了各类游戏开发者的极大关注,很多小伙伴们迫不及待地开始使用我们的Unity SDK,但由于目前我们的Mapbox Unity SDK文档只有英文版,给中文开发者带来了诸多不便。所以,今天我们特地出了一个简单的教程来教大家如何使用Mapbox Unity SDK进行游戏开发,让我们开始吧!


1. 使用Mapbox Unity SDK

  • 创建新的Unity项目

打开Unity,创建一个新的项目

  • 获取Unity Package 安装包

打开 https://www.mapbox.com/unity/,单击 Download the SDK下载SDK包。

打开Unity,在 Unity 中导入程序包:Assets菜单—>Import package—>Custom Package

  • 配置您的 Mapbox API Token

您首先需要访问令牌(access token)才能使用您的 Mapbox 帐户功能。如果已经注册了Mapbox账号,可以直接打开https://www.mapbox.com/studio/account/tokens/ 来查看Access Token。如果没有,还不赶快注册哦。

  • 在 Unity 中配置 API Access

从 Unity Editor 菜单中单击 Mapbox-> Configure Access。将您的令牌粘贴到Token字段中。假设您的令牌有效,它会被保存到 StreamingAssets / MapboxAccess.text 里的一个文本文件中。此外,你也可以直接打开MapboxAccess.text 将您的令牌粘贴进去。

备注:Git repo(Git 本地仓库) 中不存储该文件,以防止个人令牌不慎被贡献者使用。在运行时,该文件的内容将被读取并缓存以供 FileSource 请求获取。有关详细信息,请参阅Assets/Mapbox/Core/Unity/MapboxAccess.cs 。

  • 开始游戏开发

接下来,您就可以使用我们的Unity SDK进行基于地图、地理位置等方面的游戏开发了。

你可以创建自己的Scene,然后使用Unity SDK中的一些组件来创建自己想要的Factories、Filters、Layer Visualizer、Modifiers、MapVisualization等。右击文件夹可查看可用的Mapbox组件。

  • 添加Mapbox Factory

本教程中,我们使用Mapbox的组件创建Mesh Factory、Map Image Factory,然后分别设置Map Type、Style、Map ID。你可以选择预设的Mapbox地图(Basic Mapbox Style),也可以添加在Mapbox Studio中设计发布的自定义地图。

  • 添加MapVisualization

在项目中创建MapVisualization,并将刚才创建的Mesh Factory、Map Image Factory加到Factories中。

  • 添加MapController

创建一个Scene,并添加MapController,设置Map Visulization属性为刚才创建的MapVisualization。

  • 执行场景Scene

最后,让我们来执行刚刚创建的Scene!(以上设置,具体可参考Examples中Mesh Generation Basics和

Mesh Generation Styles示例)。


2. 相关示例

Mapbox Unity SDK中包含了一系列的示例(Examples文件夹中),供开发者参考,包括:

  • Mesh Generation Basics

Assets/Mapbox/Examples/MeshGenerationBasics/MeshGeneration.unity

使用 TerrainFactory、MapImageFactory 和 MeshFactory 来一起生成分层设色地图。

  • Mesh Generataion Pois

Assets/Mapbox/Examples/MeshGenerationPois/PoiGeneration.unity

在Mesh Generation Basics 基础上,将 PoiVisualizerPoiDemoPoiVisualizer)添加到 MeshFactory,来显示POI点。

  • Mesh Generation Styles

Assets/Mapbox/Examples/MeshGenerationStles/StylingDemoMeshGeneration.unity

使用 TypeFilters 筛选出特定要素来进行处理。我们选择了在网格生成中排除学校( schools)。此外,您可以使用 ModifierStacks 进一步自定义特定要素(例如,定制使用不同的颜色库)。

  • 正向地理编码(Forward Geocoder)

Assets/Mapbox/Examples/Playground/Scenes/ForwardGeocoder.unity

正向地理编码请求将从地名查询中获取 GeoJSON。每次编辑用户输入字段后都会发送一个新的请求。

  • 反向地理编码(Reverse Geocoder)

Assets/Mapbox/Examples/Playground/Scenes/ReverseGeocoder.unity

反向地理编码请求将从位置查询获取GeoJSON。位置查询字符串的格式必须为纬度,经度 。每次编辑用户输入字段后都会发送一个新的请求。

  • Directions

Assets/Mapbox/Examples/Playground/Scenes/Directions.unity

输入起始位置查询(例如“San Francisco,CA”),以及目的地查询(例如“Los Angeles, CA”)。当地理编码请求已经完成时,将执行 directions 请求。每次编辑了开始或目标用户输入字段后都会发送新的请求。Directions 结果(如果可用)将(以JSON的形式)被记录到用户界面。

  • 栅格切片(raster tiles)

Assets/Mapbox/Examples/Playground/Scenes/RasterTile.unity

使用正向地理编码请求从 Map 对象获取样式化了的栅格切片。每当更改缩放或样式时,或者当用户输入字段被编辑时,都会发送一个新的请求。

  • 矢量切片

Assets/Mapbox/Examples/Playground/Scenes/VectorTile.unity

使用正向地理编码请求从矢量切片获取 GeoJSON。每次编辑用户输入字段时都会发送新的请求。返回结果是GeoJSON具有要素集合。

  • Drive

Assets/Mapbox/Examples/Drive/Drive.unity

MapVisualization 框架内使用Mapbox Traffic 和 Mapbox Directions 数据。DirectionsHelper 通过 Latitude/Longitude 的形式将Transform位置传递给 DirectionsFactory 作为航点(waypoint)。最多可以使用 25 个航点。可参考 DriveDirectionFactory.asset 来分析生成的路线是如何被渲染的。

  • Slippy Vector Terrain

Assets/Mapbox/Examples/SlippyVectorTerrain/SlippyDemo.unity

创建 slippy map ,并附加到 MapController 游戏对象的 Slippy 组件,可根据地图中 Camera 的位置来请求获取新的切片。

  • 立体像素(Voxels)

Assets/Mapbox/Examples/Voxels/VoxelWorld.unity

基于Minecraft 风格的示例游戏展示了如何通过与传统不大一样的方式,使用 Mapbox 数据来构建地图或游戏世界。

  • LocationProvider

Assets/Mapbox/Examples/LocationProvider/LocationProvider.unity

构建您当前(设备)所在位置的地图;基于真实的或模拟的位置和前进方向来更新虚拟播放器(virtual player)的位置和倾斜度(rotation);使用模拟位置提供程序(location providers)在 Unity 编辑器中进行测试。


3. 小结

Mapbox Unity SDK在最初版的时候就面向C#游戏开发者,便于整合Mapbox的地图、定位和路径在Unity驱动的应用。

我们的主要功能有:

  • 地图:生成原生Unity物体,用矢量或栅格格式显示

  • 动态瓦片上传、卸载

  • 用Geocoding API标注搜索资产

  • 用Direction API规划从A点到B点

  • 帮助物体生成、网格生成和皮肤生成

  • 管理协调空间转换

  • 提供案例,帮助你开始


还不快来使用我们的Mapbox Unity SDK


另外,我们Mapbox Unity SDK的详细的API文档即将推出,敬请关注我们的公众号哦!


下周同一时间,我们将发布进阶版教程,教大家如何运用Mapbox Unity SDK制作3D城市建筑!约不约?



    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存